<?php

namespace app;
use think\Validate;
use app\exception\ParameterException;
class BaseValidate extends Validate
{
    /**
     * 执行参数校验
     *
     * 该函数用于根据指定的场景对传入的参数进行校验。如果校验失败，则抛出异常；否则返回 true。
     *
     * @param array $params 需要校验的参数数组，默认为空数组
     * @param string $scene 校验场景，默认为空字符串。如果指定了场景，则使用该场景进行校验
     * @return bool 如果校验成功，返回 true
     * @throws ParameterException 如果校验失败，抛出 ParameterException 异常，异常信息为校验错误信息
     */
    public function goCheck($params = [], $scene = '')
    {
        // 检查参数类型
        if (!is_array($params)) throw new ParameterException('params 必须是一个数组');
        // 根据是否指定场景，选择不同的校验方式
        $result = $scene ? $this->scene($scene)->check($params) : $this->check($params);

        // 如果校验失败，抛出异常
        if (!$result) throw new ParameterException(!empty($this->getError())?$this->getError():"参数错误,请检查保存信息");

        return true;
    }

    /**验证非中文
     * @param $str
     * @return bool
     */
    protected function noChs($str){
        $rgx = '/^[\x{4e00}-\x{9fa5}\x{9fa6}-\x{9fef}\x{3400}-\x{4db5}\x{20000}-\x{2ebe0}]+$/u';
        return !preg_match($rgx,$str);
    }

    /**
     * 验证金额是数字并且不能为负
     * @param $value
     * @return bool
     */
    protected function isPositiveNumber($value) {
        return is_numeric($value) && $value >= 0;
    }

    protected function isMobile($value)
    {
        return isMobile($value);
    }

    protected function isCard($value)
    {
        return isCard($value)?true:"请填写正确的身份证号码";
    }
}
